package com.charon.common.util;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

/**
 * 文件操作工具类
 * @author liuxiaohan
 * @date: 2018年8月24日 上午11:41:24
 */
public class FileUtils {
	
	public static void main(String[] args) {
		
	}
	
	/**
	 * 删除指定路径（所有内容）
	 * 删除--包括自身
	 * @param path 指定路径（文件或路径）
	 * @return 删除成功：true，失败：false
	 */
	public static boolean delete(String path) {
		if(path==null||"".equals(path)){
			System.out.println("传入路径不能为空！");
			return false;
		}
		File file = new File(path);
		if (!file.exists()) {
			System.out.println("路径："+path+"不存在");
			return false;
		}
		if(file.isFile()){
			return file.delete();
		}
		File[] tempList = file.listFiles();
		for (File temp:tempList) {
			delete(temp.getAbsolutePath());
		}
		file.delete();
		return true;
	}

	/**
	 * 删除指定路径下的所有空文件夹
	 * 删除--包括自身
	 * @param path 指定路径（文件夹）
	 * @return 删除成功：true，失败：false
	 */
	public static boolean delAllEmptyFolder(String path){
		if(path==null||"".equals(path)){
			System.out.println("传入路径不能为空！");
			return false;
		}
		File file=new File(path);
		if(file.isFile()||!file.exists()){
			return false;
		}
		if(file.listFiles()!=null&&file.listFiles().length>0){
			File[] fList=file.listFiles();
			for(File f:fList){
				delAllEmptyFolder(f.getAbsolutePath());//递归调用自身删除空文件夹
			}
		}
		if(file.listFiles()==null||file.listFiles().length<=0){
			file.delete();
			return true;
		}
		return true;
	}
	
	/**
	 * 根据后缀删除指定路径内文件
	 * @param path 指定路径（文件夹）
	 * @param type 文件后缀，不区分大小写（例：.txt）
	 * @return 删除成功：true，失败：false
	 */
	public static boolean delFileByType(String path,String type){
		if(path==null||type==null||"".equals(path)||"".equals(type)){
			System.out.println("传入路径或文件后缀不能为空！");
			return false;
		}
		File file=new File(path);
		if(file.exists()){
			if(file.isFile()){
				if(file.getName().toLowerCase().indexOf(type.toLowerCase())>-1){
					System.out.println("删除："+file.getName());
					file.delete();
					return true;
				}
			}else{
				File[] fList=file.listFiles();
				for(File f:fList){
					delFileByType(f.getAbsolutePath(), type);
				}
			}
		}else{
			System.out.println("传入路径不存在："+path);
		}
		return true;
	}
	
	
	
	
	
	
	
	
	
	
	//暂时不用
	public static boolean copyFile(String source,String target,String type,boolean cover) throws IOException{
		if(source==null||type==null||target==null||"".equals(target)||"".equals(source)||"".equals(type)){
			System.out.println("传入路径或文件后缀不能为空！");
			return false;
		}
		File sourceFile=new File(source);
		File targetFile=new File(target);
		if(!sourceFile.exists()){
			System.out.println("资源目录不存在："+source);
		}
		if(sourceFile.isFile()){
			if(targetFile.exists()){
				if(targetFile.isDirectory()){//如果目标目录是文件夹，则将文件拷贝到该目录下
					File targetF=new File(targetFile.getAbsoluteFile()+sourceFile.getName());
					if(cover){
						if(!targetF.exists()){
							targetF.createNewFile();
						}
						//拷贝文件，第三个参数为替换已存在的文件
						Files.copy(sourceFile.toPath(), targetF.toPath(), StandardCopyOption.REPLACE_EXISTING);
					}else{
						if(!targetF.exists()){
							targetF.createNewFile();
							//拷贝文件，第三个参数为替换已存在的文件
							Files.copy(sourceFile.toPath(), targetF.toPath(), StandardCopyOption.REPLACE_EXISTING);
						}
					}
				}else{
					if(cover){
						if(!targetFile.exists()){
							targetFile.createNewFile();
						}
						//拷贝文件，第三个参数为替换已存在的文件
						Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
					}else{
						if(!targetFile.exists()){
							targetFile.createNewFile();
							//拷贝文件，第三个参数为替换已存在的文件
							Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
						}
					}
				}
			}else{
				targetFile.createNewFile();
				if(cover){
					if(!targetFile.exists()){
						targetFile.createNewFile();
					}
					//拷贝文件，第三个参数为替换已存在的文件
					Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
				}else{
					if(!targetFile.exists()){
						targetFile.createNewFile();
						//拷贝文件，第三个参数为替换已存在的文件
						Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
					}
				}
				
			}
			if(cover){
				if(!targetFile.exists()){
					targetFile.createNewFile();	
				}
				//拷贝文件，第三个参数为替换已存在的文件
				Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
			}else{
				if(!targetFile.exists()){
					targetFile.createNewFile();	
					//拷贝文件，第三个参数为替换已存在的文件
					Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
				}else{
					throw new IOException("目标路径:"+target+" 已存在");
				}
			}
		}
		
		return false;
	}
	
	
}
